// PROGRAMA : BATPM001
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO E TODOS
// ANALISTA : CARRIJO
// PROGRAMADOR : EDU/FM DATA: 16/08/94
// OBJETIVO : MENU DE PROGRAMAS BATCH (PROCESSOS BATCH)
// : DIVISAO DOS MODULOS EM 17/05/1999
// ATUALIZACOES DATA
// PROGRAMA : BATPM001 20/01/1998
// BIBLIOTECA : PRODETR
// ANALISTA : SOLON MIRANDA
// PROGRAMADOR :
// OBJETIVO : INCREMENTAR OPCAO 'EQE' (QUADRO ESTATISTICO)
// : ALTERACAO DE TELAS E ACERTO DE DATAS (N6) PARA (N8)
// EM 19/10/1999
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Battm001;
import br.com.vti.sisp_sicrim.antigo.model.SicOperacao;
import br.com.vti.sisp_sicrim.antigo.model.Sisldat8;
import br.com.vti.sisp_sicrim.antigo.model.Sislm001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Batpm001 OBJETIVO : MENU DE PROGRAMAS BATCH (PROCESSOS BATCH) *
 * 
 * @author Incode - Data: jun/2014
 * 
 */

@Resource
@Path("/antigo/batpm001")
public class Batpm001 { // Includes utilizados
	Sisldat8 sisldat8 = new Sisldat8();
	Sislm001 sislm001 = new Sislm001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	SicOperacao vwDveope = new SicOperacao();
	Estpb131 estpb131;

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Batpm001 batpm001Anterior;
	String faseproc = "0";
	Batpm001 Batpm001Anterior;
	Battm001 battm001;

	// SETA PF'S
	// SETA PF'S
	// SET KEY PF12

	private Battm001 preMapas() {

		Battm001 battm001 = new Battm001(true, sessao);
		battm001.setDataCorrente(UtilBean.obtemDataDia());
		battm001.setNomeClasse(this.getClass().getSimpleName().toUpperCase());

		funcoes.sisnc001();
		battm001.setMes(funcoes.mes);
		battm001.setMesa(funcoes.dataL);

		return battm001;
	}

	public Batpm001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Battm001 battm001) {
		try {
			main(battm001);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, "");
		}
	}

	private void main(Battm001 pbattm001) throws Exception {
		if (pbattm001 == null) {
			primeiraVez = true;
			battm001 = preMapas();
			battm001.setNavegar("../batpm001/executar");
			result.include("battm001", battm001);
			sessao.setAtributo("BATPM001", this);
			battm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pbattm001);
		}

		estpb131 = new Estpb131(sessao);
		battm001.setMensagem("");
		battm001.setOperacao("");
		// L
		sessao.getSisgsisp().setVlt(16);
		sessao.getSisgsisp().setVar(16);
		sislm001.mdfuop = UtilBean.moveSubstring(sislm001.mdfuop, 0, 2, "N", 16);
		battm001.receberTela(false, result);
		if (battm001.getOperacao().equals("CAD")) {
			Sispm001 sispm001 = new Sispm001(result, sessao);
			sispm001.executar(null, null, null);
			return;
		}

		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Sispm001 sispm001 = new Sispm001(result, sessao);
			sispm001.executar(null, null, null);
			return;
		}

		if (battm001.getOperacao().trim().equals("")) {
			switch (battm001.getCamtela()) {
			case 10: {
				sislm001.l = 2;
				sislm001.mdfuop = UtilBean.moveSubstring(sislm001.mdfuop, 2, 1, "A", "E");
				monta();
				return;
			}
			case 12: {
				sislm001.l = 2;
				sislm001.mdfuop = UtilBean.moveSubstring(sislm001.mdfuop, 2, 1, "A", "A");
				monta();
				return;
			}
			case 14: {
				sislm001.l = 2;
				sislm001.mdfuop = UtilBean.moveSubstring(sislm001.mdfuop, 2, 1, "A", "S");
				monta();
				return;
			}
			default: {
				break;
			}
			}
		} else {
			// FILER = operacao;
			switch (battm001.getOperacao()) {
			case "NTM":
			case "NPM":
			case "NAM":
			case "NMM":
			case "NEC":
			case "EAT":
			case "ECC":
			case "IPE":
			case "AMI":
			case "EMI": {
				vwDveope.consultaMdfuop(UtilBean.subStr(sislm001.mdfuop, 2, 1), battm001.getOperacao(), sessao.getSisgsisp().getVlt());
				funcoes.executarModulo(vwDveope.getPrograma(), "Batpm001", result, sessao);
				// funcoes.batsba01(sislm001.mdfuop);
				break;
			}
			case "EQE": {

				estpb131.executar(sisldat8.datini, sisldat8.datfim, 0, sessao.getSisgsisp().getMatric(), sessao.getSisgsisp().getSenha());
				funcoes.executarModulo("Estpt131", "Batpm001", result, sessao);
				// batsb001.executar();// (mdfuop ,sisldat8.datini
				// ,sisldat8.datfim
				// ,sessao.getSisgsisp().getMatric(),sessao.getSisgsisp().getSenha());
				break;
			}
			default: {
				funcoes.sissm001(result, sessao);
			}
			}
		}
		battm001.setOperacao("");
		sessao.setAtributo("BATPM001", this);
		result.include("battm001", battm001);
		if (!result.used()) {
			battm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		}
	}

	private void monta() {
		Sissm004 sissm004 = new Sissm004(result, sessao);
		sissm004.voltar = "br.com.vti.sisp.controller.programa.Batpm001";
		sissm004.mdfuo1 = sislm001.mdfuop;
		sissm004.z = sislm001.l;
		sissm004.executar(null, null);
		// if (UtilBean.funcao.equals(UtilBean.ctt_retorna))
		// {
		// continue;
		// }
	}

	private void restaurarEstados(Battm001 pbattm001) {
		this.batpm001Anterior = (Batpm001) sessao.getAtributo("BATPM001");
		if (pbattm001 != null) {
			battm001 = pbattm001;
		} else {
			battm001 = this.batpm001Anterior.battm001;
		}
		battm001.setSessao(sessao);

		funcoes.sisnc001();
		battm001.setMes(funcoes.mes);
		battm001.setMesa(funcoes.dataL);
		this.faseproc = this.batpm001Anterior.faseproc;
	}
}
